home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 44 / Amiga Format CD44 (1999-08-26)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-10].iso / -in_the_mag- / basics / amos / artcoder.lha / ArtCoder / ArtCoder.AMOS / ArtCoder.amosSourceCode next >
AMOS Source Code  |  1993-10-29  |  35KB  |  1,043 lines

  1. ' Amos Art Coder -- Writes code to re-create your drawing. 
  2. ' Copyright 1993, Steve Tiffany.  All rights reserved. 
  3. Dim OLDPAL$(32) : SCRNCHECK : If GOTTASETUP Then SCRNSETUP : SCRNCENTER
  4. 'If Text buffer is less than 20000, increase it (in AMOS 1.3) with  Alt - F9.
  5. '                         or (in AMOS Pro) with Left Amiga - Shift - T   
  6. 'Merge code (Ram:ArtCode.asc) here, using (in AMOS 1.3)  Shift - F5: 
  7. '                         or (in AMOS Pro)  Left Amiga - Shift - M 
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17. '*************************************************** 
  18. For J=0 To 31 : OLDPAL$(J)=Hex$(Colour(J)) : Next J
  19. Change Mouse 4 : MMODE=4
  20. Unpack 7 To 1 : Wind Save 
  21. If Ntsc=0
  22.    Screen Display 1,112,265,320,25
  23. End If 
  24. Screen 1 : Get Palette 0
  25. HIDFLAG=0 : OUTFLAG=0 : BX=159 : ARTMODE=0 : 
  26. 'CODEWIDTH=200 
  27. CODEWIDTH=60
  28. Screen 1 : Ink 0,,0 : If NUMCOLORS<32 Then Bar 159,12 To 319,24
  29. If NUMCOLORS<16 Then Bar 239,0 To 319,12
  30. If NUMCOLORS<8 Then Bar 199,0 To 239,12
  31. If NUMCOLORS<4 Then Bar 179,0 To 199,12
  32. Reserve Zone 6
  33. Screen 0 : Gr Writing 1 : GRMODE=1
  34. Proc CHECKPATTERN : HOLDCOLOR=CURRCOLOR
  35. If CURRCOLOR<16
  36.    ICONROWNUM=0 : ICONCOLNUM=CURRCOLOR
  37. Else 
  38.    ICONROWNUM=1 : ICONCOLNUM=CURRCOLOR-16
  39. End If 
  40. BX=(ICONCOLNUM*10)+159 : BY=(ICONROWNUM*12)
  41. Screen 1 : Ink 17 : Box BX,BY To BX+10,BY+12
  42.  
  43. Open Out 1,"ram:ArtCode.asc"
  44. Open Out 2,"ram:XYclip.asc"
  45. Wait Vbl 
  46. If Ntsc
  47.    Limit Mouse 112,215 To 431,239 : Rem : until they  an pick artmode
  48. Else 
  49.    Limit Mouse 112,265 To 431,289
  50. End If 
  51.  
  52. Do 
  53.    K$=Inkey$ : SCODE=Scancode
  54.    If SCODE=89 : Rem : user selected F10 to toggle tool bar...  
  55.       If HIDFLAG=0
  56.          Screen Hide 1 : HIDFLAG=1
  57.       Else 
  58.          Screen Show 1 : HIDFLAG=0
  59.       End If 
  60.    End If 
  61.    If SCODE=64 Then CLICKHANDLER["POLYEND"]
  62.    If K$="D" Then CLICKHANDLER["PGON"]
  63.    If K$="d" Then CLICKHANDLER["PLINE"]
  64.    If K$="v" Then CLICKHANDLER["SEG"]
  65.    If K$="r" Then CLICKHANDLER["RECBOX"]
  66.    If K$="R" Then CLICKHANDLER["RECBAR"]
  67.    If K$="f" Then CLICKHANDLER["PNT"]
  68.    If K$="p" Then CLICKHANDLER["PAL"]
  69.    If K$="t" Then CLICKHANDLER["TXT"]
  70.    If K$="Q" Then CLICKHANDLER["QUIT"]
  71.    If K$="," Then CLICKHANDLER["COMMA"]
  72.    If ARTMODE=4 or ARTMODE=5
  73.       Screen 0
  74.       Gr Writing 3
  75.       HOLDXM=X Screen(X Mouse) : HOLDYM=Y Screen(Y Mouse)
  76.       Draw HOLDXM,0 To HOLDXM,SCRNHEIGHT-1
  77.       Draw 0,HOLDYM To SCRNWIDTH-1,HOLDYM
  78.       Draw HOLDXM,0 To HOLDXM,SCRNHEIGHT-1
  79.       Draw 0,HOLDYM To SCRNWIDTH-1,HOLDYM
  80.       Gr Writing 1
  81.    End If 
  82.    If Mouse Click=1 Then CLICKHANDLER[""]
  83. Loop 
  84.  
  85. Procedure CLICKHANDLER[ROUTINE$]
  86.    Shared OUTFLAG,BX,BY,ARTMODE,CURRCOLOR,LCOUNT,NEWFLAG,HOLDXM,HOLDYM,CODEWIDTH
  87.    Shared NUMDOTS,WORD$,CURRRED,CURRGREEN,CURRBLUE,CHEXR$,CHEXG$,CHEXB$,OLDPAL$()
  88.    Shared XOFFSET,YOFFSET,XLIMIT,YLIMIT,NUMCOLORS,PATNUM,PCOLOR,GRMODE,CFLAG
  89.    Shared HOLDCOLOR,HIDFLAG,MMODE,SCRNHEIGHT,SCRNWIDTH
  90.    XM=X Mouse : YM=Y Mouse
  91.  
  92.    CURRSCREEN=Scin(XM,YM)
  93.    If ROUTINE$<>"" Then CURRSCREEN=1
  94.    Screen CURRSCREEN
  95.    XM=X Screen(XM) : YM=Y Screen(YM)
  96.  
  97. 'if it's a color or a new artmode on Screen 1... 
  98.    If CURRSCREEN=1
  99. '     first take care of all the X,Y's that have accumulated, if any...  
  100.       If Lof(2)>0
  101.          If ARTMODE=1
  102.             Gosub ARTMODE1
  103.          End If 
  104.          If ARTMODE=2
  105.             Gosub PLUSINK
  106.             Close 2 : Open In 2,"ram:XYclip.asc" : Gosub CHECKWIDTH
  107.             Print #1,"Polyline "; : Add LCOUNT,9
  108.             Input #2,X$ : Input #2,Y$ : X=Val(X$) : Y=Val(Y$)
  109.             Print #1,X;",";Y; : Gosub LLENNY
  110.             While Not Eof(2)
  111.                Input #2,X$ : Input #2,Y$ : X=Val(X$) : Y=Val(Y$)
  112.                X$=X$-" " : Y$=Y$-" "
  113.                Print #1," To ";X$;",";Y$; : Add LCOUNT,4
  114.                Gosub LLENNY
  115.                If LCOUNT>CODEWIDTH and Pof(2)<Lof(2)
  116.                   Print #1,"" : Print #1,"Polyline "; : LCOUNT=9
  117.                End If 
  118.             Wend 
  119.             NEWFLAG=1 : Print #1," : "; : Add LCOUNT,3
  120.             Close 2 : Open Out 2,"ram:XYclip.asc"
  121.          End If 
  122.          If ARTMODE>2 and ARTMODE<6
  123.             Gosub PLUSINK : Close 2 : Open In 2,"ram:XYclip.asc"
  124.             If ARTMODE=3
  125.                BXBAR$="Draw "
  126.             End If 
  127.             If ARTMODE=4
  128.                BXBAR$="Box "
  129.             End If 
  130.             If ARTMODE=5
  131.                Gosub CHECKWIDTH
  132.                If GRMODE<>1
  133.                   Print #1,"Gr Writing 1 : "; : GRMODE=1 : Add LCOUNT,15
  134.                End If 
  135.                BXBAR$="Bar "
  136.             End If 
  137.             While Not Eof(2)
  138.                Gosub CHECKWIDTH
  139.                Input #2,X$ : Input #2,Y$ : Input #2,X2$ : Input #2,Y2$
  140.                X=Val(X$) : Y=Val(Y$) : X2=Val(X2$) : Y2=Val(Y2$)
  141.                Print #1,BXBAR$; : Add LCOUNT,5
  142.                X$=X$-" " : Y$=Y$-" " : X2$=X2$-" " : Y2$=Y2$-" "
  143.                Print #1,X$;",";Y$; : Gosub LLENNY : Add LCOUNT,1
  144.                Print #1," To ";X2$;",";Y2$; : Add LCOUNT,5
  145.                X=Val(X2$) : Y=Val(Y2$) : Gosub LLENNY : Rem so lenny's accurate  
  146.                Print #1," : "; : Add LCOUNT,3 : Gosub CHECKWIDTH
  147.             Wend 
  148.             NEWFLAG=1
  149.             Close 2 : Open Out 2,"ram:XYclip.asc"
  150.  
  151.          End If 
  152.          If ARTMODE=6
  153.             Gosub PLUSINK : Close 2 : Open In 2,"ram:XYclip.asc"
  154.             Gosub CHECKWIDTH
  155.             While Not Eof(2)
  156.                Input #2,X$ : Input #2,Y$ : X=Val(X$) : Y=Val(Y$) : Gosub LLENNY
  157.                Print #1,"Paint ";X$;",";Y$;" : "; : Add LCOUNT,10
  158.                Gosub CHECKWIDTH
  159.             Wend 
  160.             NEWFLAG=1
  161.             Close 2 : Open Out 2,"ram:XYclip.asc"
  162.  
  163.          End If 
  164.          If ARTMODE=7
  165.             Gosub PLUSINK : Close 2 : Open In 2,"ram:XYclip.asc"
  166.             Gosub CHECKWIDTH
  167.             If GRMODE<>0
  168.                Print #1,"Gr Writing 0 : "; : GRMODE=0 : Add LCOUNT,15 : Gosub CHECKWIDTH
  169.             End If 
  170.             WORDLENGTH=Len(WORD$)
  171.             If(WORDLENGTH+LCOUNT+15)>CODEWIDTH
  172.                Print #1,"" : LCOUNT=0
  173.             End If 
  174.             While Not Eof(2)
  175.                Gosub CHECKWIDTH
  176.                Print #1,"Text "; : Add LCOUNT,5
  177.                Input #2,X$ : Input #2,Y$ : X=Val(X$) : Y=Val(Y$)
  178.                X$=X$-" " : Y$=Y$-" "
  179.                Print #1,X$;",";Y$;","; : Gosub LLENNY : Add LCOUNT,7
  180.                Print #1,Chr$(34);WORD$;Chr$(34);" : "; : Add LCOUNT,WORDLENGTH
  181.                Gosub CHECKWIDTH
  182.             Wend 
  183.             NEWFLAG=1 : 
  184.             Close 2 : Open Out 2,"ram:XYclip.asc"
  185.  
  186.          End If 
  187.          If ARTMODE=8
  188.             Gosub PLUSINK : Close 2 : Open In 2,"ram:XYclip.asc"
  189.             While Not Eof(2)
  190.                Gosub CHECKWIDTH
  191.                Print #1,"Ellipse "; : Add LCOUNT,8
  192.                Input #2,X$ : Input #2,Y$ : X=Val(X$) : Y=Val(Y$)
  193.                X$=X$-" " : Y$=Y$-" "
  194.                Print #1,X$;",";Y$; : Gosub LLENNY : Add LCOUNT,1
  195.                Input #2,X$ : Input #2,Y$ : X=Val(X$) : Y=Val(Y$)
  196.                X$=X$-" " : Y$=Y$-" "
  197.                Print #1,",";X$;",";Y$; : Gosub LLENNY : Add LCOUNT,2
  198.                Print #1," : "; : Add LCOUNT,3 : Gosub CHECKWIDTH
  199.             Wend 
  200.             NEWFLAG=1
  201.             Close 2 : Open Out 2,"ram:XYclip.asc"
  202.          End If 
  203.       End If 
  204.  
  205. ' they've used a keyboard equivalent...  
  206.    If ROUTINE$<>""
  207.       Limit Mouse XOFFSET,YOFFSET To XLIMIT,YLIMIT
  208.       Gosub ROUTINE$ : Pop Proc
  209.    End If 
  210.  
  211. ' they're picking a color from the grid...   
  212.       If XM>158
  213.          Gosub CLEARCOLORGRID
  214.          ICONCOLNUM=((XM-160)/10)
  215.          If ICONCOLNUM>NUMCOLORS-1
  216.             ICONCOLNUM=NUMCOLORS-1
  217.          End If 
  218.  
  219.          ICONROWNUM=(YM)/13
  220.          If NUMCOLORS<32
  221.             ICONROWNUM=0
  222.          End If 
  223.  
  224.          CURRCOLOR=ICONCOLNUM+(ICONROWNUM*16)
  225.  
  226.          BX=(ICONCOLNUM*10)+159 : BY=(ICONROWNUM*12)
  227.          Ink 17 : Box BX,BY To BX+10,BY+12
  228.          Screen 0 : Ink CURRCOLOR : CFLAG=1
  229.  
  230.       Else 
  231. '     they're picking a new artmode... 
  232.          ICONCOLNUM=((XM)/40)+1
  233.          ICONROWNUM=(YM)/13
  234.          ICONID=ICONCOLNUM+(ICONROWNUM*4)
  235.          On ICONID Gosub PGON,PLINE,SEGPAINT,BBOXBAR,OUTLYN,PATTERN,TXTPAL,CIRCQUIT
  236.       End If 
  237.       If ARTMODE>0
  238.          Limit Mouse XOFFSET,YOFFSET To XLIMIT,YLIMIT
  239.       End If 
  240.       Pop Proc
  241.    End If 
  242.  
  243. 'from here on it's an X,Y coordinate on Screen 0...  
  244.    If ARTMODE=1
  245.       If NEWFLAG=1
  246.          Print #2,XM : Print #2,YM
  247.          NEWFLAG=0 : HOLDXM=XM : HOLDYM=YM : NUMDOTS=1 : NUMDOT$=Str$(NUMDOTS)-" "
  248.          Ink 1,0 : Gr Writing 1 : Text 5,16,NUMDOT$ : Ink CURRCOLOR,PCOLOR
  249.       End If 
  250.       Screen 0
  251.       While Mouse Key=1
  252.          XM2=X Screen(X Mouse) : YM2=Y Screen(Y Mouse) : Gr Writing 3
  253.          Draw HOLDXM,HOLDYM To XM2,YM2
  254.          Draw HOLDXM,HOLDYM To XM2,YM2
  255.       Wend 
  256.       Gr Writing 1 : Draw HOLDXM,HOLDYM To XM2,YM2
  257.       HOLDXM=XM2 : HOLDYM=YM2
  258.       Print #2,HOLDXM : Print #2,HOLDYM
  259.       Ink 1,0 : Inc NUMDOTS : NUMDOT$=Str$(NUMDOTS)-" " : Text 5,16,NUMDOT$
  260.       Ink CURRCOLOR,PCOLOR
  261.       If NUMDOTS=15
  262.          Gosub ARTMODE1
  263.       End If 
  264.  
  265.    End If 
  266.    If ARTMODE=2
  267.       If NEWFLAG=1
  268.          Print #2,XM : Print #2,YM
  269.          NEWFLAG=0 : HOLDXM=XM : HOLDYM=YM
  270.       End If 
  271.       Screen 0
  272.       While Mouse Key=1
  273.          XM2=X Screen(X Mouse) : YM2=Y Screen(Y Mouse)
  274.          Gr Writing 3 : Draw HOLDXM,HOLDYM To XM2,YM2
  275.          Draw HOLDXM,HOLDYM To XM2,YM2
  276.       Wend 
  277.       Gr Writing 1 : Draw HOLDXM,HOLDYM To XM2,YM2
  278.       HOLDXM=XM2 : HOLDYM=YM2
  279.       Print #2,HOLDXM : Print #2,HOLDYM
  280.    End If 
  281.  
  282.    If ARTMODE=3
  283.       NEWFLAG=0 : HOLDXM=XM : HOLDYM=YM
  284.       Screen 0
  285.       While Mouse Key=1
  286.          XM2=X Screen(X Mouse) : YM2=Y Screen(Y Mouse)
  287.          Gr Writing 3 : Draw HOLDXM,HOLDYM To XM2,YM2
  288.          Draw HOLDXM,HOLDYM To XM2,YM2
  289.       Wend 
  290.       Gr Writing 1 : Draw HOLDXM,HOLDYM To XM2,YM2
  291.       Print #2,HOLDXM : Print #2,HOLDYM
  292.       Print #2,XM2 : Print #2,YM2
  293.    End If 
  294.  
  295.    If ARTMODE=4 or ARTMODE=5
  296.       NEWFLAG=0 : HOLDXM=XM : HOLDYM=YM
  297.       Screen 0 : Gr Writing 3
  298.       While Mouse Key=1
  299.          XM2=X Screen(X Mouse) : YM2=Y Screen(Y Mouse)
  300.          Box HOLDXM,HOLDYM To XM2,YM2
  301.          Box HOLDXM,HOLDYM To XM2,YM2
  302.          Draw XM2,0 To XM2,SCRNHEIGHT-1
  303.          Draw 0,YM2 To SCRNWIDTH-1,YM2
  304.          Draw XM2,0 To XM2,SCRNHEIGHT-1
  305.          Draw 0,YM2 To SCRNWIDTH-1,YM2
  306.       Wend 
  307.       Gr Writing 1 : Box HOLDXM,HOLDYM To XM2,YM2
  308.       If ARTMODE=5
  309.          If HOLDXM>XM2
  310.             Swap HOLDXM,XM2
  311.          End If 
  312.          If HOLDYM>YM2
  313.             Swap HOLDYM,YM2
  314.          End If 
  315.          If HOLDXM<>XM2 and HOLDYM<>YM2
  316.             Bar HOLDXM,HOLDYM To XM2,YM2
  317.          End If 
  318.       End If 
  319.       If HOLDXM<>XM2 and HOLDYM<>YM2
  320.          Print #2,HOLDXM : Print #2,HOLDYM : Print #2,XM2 : Print #2,YM2
  321.       End If 
  322.    End If 
  323.  
  324.    If ARTMODE=6 : Rem : paint
  325.       Screen 0 : Paint XM,YM
  326.       Print #2,XM : Print #2,YM
  327.    End If 
  328.  
  329.    If ARTMODE=7 : Rem : Text 
  330.       Screen 0
  331.       While Mouse Key=1
  332.          XM2=X Screen(X Mouse) : YM2=Y Screen(Y Mouse)
  333.          Gr Writing 2 : Text XM2,YM2,WORD$
  334.          Text XM2,YM2,WORD$
  335.       Wend 
  336.       Gr Writing 0 : Text XM2,YM2,WORD$ : Gr Writing 1
  337.       Print #2,XM2 : Print #2,YM2
  338.    End If 
  339.  
  340.    If ARTMODE=8 : Rem : circle 
  341.       NEWFLAG=0 : HOLDXM=XM : HOLDYM=YM
  342.       Screen 0
  343.       While Mouse Key=1
  344.          XM2=X Screen(X Mouse) : YM2=Y Screen(Y Mouse)
  345.          XM2=Abs(HOLDXM-XM2)+1 : YM2=Abs(HOLDYM-YM2)+1
  346.          Gr Writing 3 : Ellipse HOLDXM,HOLDYM,XM2,YM2
  347.          Ellipse HOLDXM,HOLDYM,XM2,YM2
  348.       Wend 
  349.       Gr Writing 1 : Ellipse HOLDXM,HOLDYM,XM2,YM2
  350.       Print #2,HOLDXM : Print #2,HOLDYM : Print #2,XM2 : Print #2,YM2
  351.    End If 
  352. Pop Proc
  353.  
  354. POLYEND:
  355.    If ARTMODE=1 Then Gosub PGON : Return 
  356.    If ARTMODE=2 Then Gosub PLINE
  357.    Return 
  358. PGON:
  359.    ARTMODE=1 : Gosub CLEARGRID : Box 0,0 To 39,12 : Ink CURRCOLOR
  360.    Change Mouse 4 : MMODE=4
  361.    NEWFLAG=1 : Screen 0 : Get Block 1,5,9,16,9 : Return 
  362. PLINE:
  363.    ARTMODE=2 : Gosub CLEARGRID : Box 39,0 To 79,12 : Ink CURRCOLOR
  364.    Change Mouse 4 : MMODE=4
  365.    NEWFLAG=1 : Return 
  366. SEGPAINT:
  367.    If XM<100
  368. SEG:
  369.       ARTMODE=3 : Gosub CLEARGRID : Box 79,0 To 99,12 : Ink CURRCOLOR
  370.       Change Mouse 4 : MMODE=4
  371.       NEWFLAG=1 : Return 
  372.    End If 
  373. PNT:
  374.    ARTMODE=6 : Gosub CLEARGRID : Box 99,0 To 119,12 : Ink CURRCOLOR
  375.    Change Mouse 6 : MMODE=6 : Return 
  376. BBOXBAR:
  377.    If XM<140
  378. RECBOX:
  379.       ARTMODE=4 : Gosub CLEARGRID : Box 119,0 To 139,12 : Ink CURRCOLOR
  380.       Change Mouse 4 : MMODE=4 : Return 
  381.    End If 
  382. RECBAR:
  383.    ARTMODE=5 : Gosub CLEARGRID : Box 139,0 To 158,12 : Ink CURRCOLOR
  384.    Change Mouse 4 : MMODE=4 : Return 
  385. OUTLYN:
  386.    If OUTFLAG=0
  387.       Change Mouse 4
  388.       Screen 0 : Set Paint 1
  389.       Screen 1 : Gosub CHECKWIDTH : Print #1,"Set Paint 1 : "; : Add LCOUNT,14
  390.       If Ntsc
  391.          Limit Mouse 271,215 To 431,239
  392.       Else 
  393.          Limit Mouse 271,265 To 431,289
  394.       End If 
  395.       While Mouse Click=0 : Wend 
  396.       XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
  397.       If Ntsc
  398.          Limit Mouse 112,215 To 431,239
  399.       Else 
  400.          Limit Mouse 112,265 To 431,289
  401.       End If 
  402.       ICONCOLNUM=((XM-160)/10)
  403.       If ICONCOLNUM>NUMCOLORS-1
  404.          ICONCOLNUM=NUMCOLORS-1
  405.       End If 
  406.       ICONROWNUM=(YM)/13
  407.       If NUMCOLORS<32
  408.          ICONROWNUM=0
  409.       End If 
  410.       OLCOLOR=ICONCOLNUM+(ICONROWNUM*16) : Screen 0 : Ink ,,OLCOLOR
  411.       Gosub CHECKWIDTH : Print #1,"Ink ,,";OLCOLOR;" : "; : Add LCOUNT,11
  412.       Screen 1 : Ink 17 : Polyline 30,17 To 32,22 To 36,14 : OUTFLAG=1
  413.    Else 
  414.       Gosub CHECKWIDTH
  415.       Screen 0 : Set Paint 0 : Print #1,"Set Paint 0 : "; : Add LCOUNT,14
  416.       Screen 1 : Ink 0 : Bar 30,14 To 36,22 : OUTFLAG=0
  417.    End If 
  418.    If ARTMODE>0 and CURRCOLOR>-1
  419.       Limit Mouse XOFFSET,YOFFSET To XLIMIT,YLIMIT
  420.    End If 
  421.    Change Mouse MMODE
  422.    Screen 0 : Ink CURRCOLOR
  423.    Return 
  424.  
  425. PATTERN:
  426.    OLDPCOLOR=PCOLOR : OLDPATNUM=PATNUM : Change Mouse 4
  427.    Wind Open 1,0,0,20,4 : Set Pattern 0
  428.    Ink 0,PCOLOR : Bar 0,0 To 158,24
  429.    Ink 2 : Box 107,0 To 158,24 : Draw 107,13 To 158,13
  430.    Ink 4,0 : Text 109,21,"Cancel" : Text 124,9,"OK" : Ink CURRCOLOR,PCOLOR
  431.    Set Slider 0,1,7,2,0,0,4,0
  432.    Set Pattern PATNUM : Bar 4,2 To 106,15
  433.    Hslider 4,16 To 106,23,102,PATNUM*3,4 : Set Zone 3,4,16 To 106,23
  434.    Set Zone 4,107,2 To 158,13 : Set Zone 5,107,14 To 158,24
  435.    Set Zone 6,159,0 To 319,24
  436.    Wait 5 : Rem so it doesn't re-set PATNUM value
  437.  
  438.    Repeat 
  439.       If Mouse Zone=3 and Mouse Key=1
  440.          Limit Mouse X Hard(4),Y Hard(16) To X Hard(105),Y Hard(23)
  441.          While Mouse Key=1
  442.             X=X Screen(X Mouse)-4
  443.             Set Slider 0,1,7,2,0,0,4,0
  444.             Hslider 4,16 To 106,23,102,X,4 : 
  445.             PATNUM=((X+4)/3)-1
  446.             Set Pattern PATNUM : Bar 4,2 To 106,15
  447.             PATNUM$=Str$(PATNUM)-" " : Text 46,12,PATNUM$
  448.          Wend 
  449.          Screen 0 : Set Pattern PATNUM : Screen 1
  450.       End If 
  451.  
  452.       If Mouse Zone=6 and Mouse Key=1
  453.          XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
  454.          Ink 0 : Box BX,BY To BX+10,BY+12
  455.          ICONCOLNUM=((XM-160)/10)
  456.          ICONROWNUM=(YM)/13
  457.          PCOLOR=ICONCOLNUM+(ICONROWNUM*16)
  458.          BX=(ICONCOLNUM*10)+159 : BY=(ICONROWNUM*12)
  459.          Ink 17 : Box BX,BY To BX+10,BY+12
  460.          Screen 0 : Ink CURRCOLOR,PCOLOR : Screen 1 : Ink CURRCOLOR,PCOLOR
  461.             Set Pattern PATNUM : Bar 4,2 To 106,15
  462.             PATNUM$=Str$(PATNUM)-" " : Text 46,12,PATNUM$
  463.       End If 
  464.       If Ntsc
  465.          Limit Mouse 112,215 To 431,239 : Rem : Screen 1 only... 
  466.       Else 
  467.          Limit Mouse 112,265 To 431,289
  468.       End If 
  469.    Until Mouse Key=1 and Mouse Zone>3 and Mouse Zone<6
  470.  
  471.    If Mouse Zone=4 and Mouse Key=1
  472.       If PATNUM<>OLDPATNUM
  473.          Gosub CHECKWIDTH : Print #1,"Set Pattern ";PATNUM;" : ";
  474.          Add LCOUNT,17 : Gosub CHECKWIDTH
  475.       End If 
  476.       If PCOLOR<>OLDPCOLOR
  477.          Print #1,"Ink ,";PCOLOR;" : "; : Add LCOUNT,10 : Gosub CHECKWIDTH
  478.       End If 
  479.    End If 
  480.    If Mouse Zone=5 and Mouse Key=1
  481.       PCOLOR=OLDPCOLOR : PATNUM=OLDPATNUM : Set Pattern PATNUM
  482.    End If 
  483.    Wind Close 
  484.    Screen 0 : Set Pattern PATNUM : Ink CURRCOLOR,PCOLOR
  485.    Screen 1 : Set Pattern 0
  486.    If PATNUM=0
  487.       Ink 0,1 : Bar 70,14 To 76,22
  488.    Else 
  489.       Ink 17 : Polyline 70,17 To 72,22 To 76,14
  490.    End If 
  491.    Ink CURRCOLOR
  492.    If ARTMODE>0
  493.       Limit Mouse XOFFSET,YOFFSET To XLIMIT,YLIMIT
  494.    End If 
  495.    Change Mouse MMODE
  496. Return 
  497.  
  498. TXTPAL:
  499.    If XM>99
  500. TXT:
  501.       Change Mouse 4 : MMODE=4
  502.       If ARTMODE<>7
  503.          Gosub CHECKWIDTH
  504.          If GRMODE<>0
  505.             Print #1,"Gr Writing 0 : "; : GRMODE=0 : 
  506.             Add LCOUNT,15 : Gosub CHECKWIDTH
  507.          End If 
  508.       End If 
  509.       If HIDFLAG=1
  510.          Screen Show 1
  511.       End If 
  512.       Wind Open 1,0,0,39,3,1 : Border 3,5,1 : Print 
  513.       Line Input "Text? ";WORD$; : Wind Close 
  514.       If HIDFLAG=1
  515.          Screen Hide 1
  516.       End If 
  517.       If WORD$=""
  518.          Return 
  519.       End If 
  520.       ARTMODE=7 : Gosub CLEARGRID : Box 99,12 To 119,24 : Ink CURRCOLOR
  521.       Return 
  522.    End If 
  523.  
  524. 'else it's the palette requester... stay here 'til they hit OK or Cancel...  
  525. PAL:
  526.    Change Mouse 4
  527.    If HIDFLAG=1
  528.       Screen Show 1
  529.    End If 
  530.    Wind Open 1,0,0,20,4
  531.    Ink 0 : Bar 0,0 To 158,24
  532.    Ink 2 : Box 107,0 To 158,24 : Draw 107,13 To 158,13
  533.    Ink 4,0 : Text 109,21,"Cancel" : Text 124,9,"OK"
  534.    OLDCURRCOLOR=CURRCOLOR
  535. NEWCOLOR:
  536.    Proc RGBER
  537.    Ink 4,0 : Text 1,7,CHEXR$ : Text 1,15,CHEXG$ : Text 1,23,CHEXB$
  538.  
  539.    Set Slider 0,1,7,2,0,0,4,0
  540.    Hslider 10,2 To 106,8,96,CURRRED*6,6 : Set Zone 1,10,2 To 106,8
  541.    Hslider 10,9 To 106,15,96,CURRGREEN*6,6 : Set Zone 2,10,9 To 106,15
  542.    Hslider 10,16 To 106,23,96,CURRBLUE*6,6 : Set Zone 3,10,16 To 106,23
  543.    Set Zone 4,107,2 To 158,13 : Set Zone 5,107,14 To 158,24
  544.    Set Zone 6,159,0 To 319,24
  545.    Wait 5 : Rem so it doesn't re-set currblue value
  546.  
  547.    Repeat 
  548.       If Mouse Zone=1 and Mouse Key=1
  549.          Limit Mouse X Hard(10),Y Hard(2) To X Hard(105),Y Hard(8)
  550.          While Mouse Key=1
  551.             X=X Screen(X Mouse)-10
  552.             Set Slider 0,1,7,2,0,0,4,0
  553.             Hslider 10,2 To 106,8,96,X,6 : 
  554.             CURRRED=((X+6)/6)-1
  555.             CHEXR$=Hex$(CURRRED) : CHEXR$=Right$(CHEXR$,1) : Text 1,7,CHEXR$
  556.             CHEX$="$"+CHEXR$+CHEXG$+CHEXB$ : 
  557.             Screen 0 : Colour CURRCOLOR,Val(CHEX$)
  558.             Screen 1 : Colour CURRCOLOR,Val(CHEX$)
  559.          Wend 
  560.       End If 
  561.       If Mouse Zone=2 and Mouse Key=1
  562.          Limit Mouse X Hard(10),Y Hard(9) To X Hard(105),Y Hard(15)
  563.          While Mouse Key=1
  564.             X=X Screen(X Mouse)-10
  565.             Set Slider 0,1,7,2,0,0,4,0
  566.             Hslider 10,9 To 106,15,96,X,6 : 
  567.             CURRGREEN=((X+6)/6)-1
  568.             CHEXG$=Hex$(CURRGREEN) : CHEXG$=Right$(CHEXG$,1) : Text 1,15,CHEXG$
  569.             CHEX$="$"+CHEXR$+CHEXG$+CHEXB$ : Colour CURRCOLOR,Val(CHEX$)
  570.             Screen 0 : Colour CURRCOLOR,Val(CHEX$)
  571.             Screen 1 : Colour CURRCOLOR,Val(CHEX$)
  572.          Wend 
  573.       End If 
  574.       If Mouse Zone=3 and Mouse Key=1
  575.          Limit Mouse X Hard(10),Y Hard(16) To X Hard(105),Y Hard(23)
  576.          While Mouse Key=1
  577.             X=X Screen(X Mouse)-10
  578.             Set Slider 0,1,7,2,0,0,4,0
  579.             Hslider 10,16 To 106,23,96,X,6 : 
  580.             CURRBLUE=((X+6)/6)-1
  581.             CHEXB$=Hex$(CURRBLUE) : CHEXB$=Right$(CHEXB$,1) : Text 1,23,CHEXB$
  582.             CHEX$="$"+CHEXR$+CHEXG$+CHEXB$ : Colour CURRCOLOR,Val(CHEX$)
  583.             Screen 0 : Colour CURRCOLOR,Val(CHEX$)
  584.             Screen 1 : Colour CURRCOLOR,Val(CHEX$)
  585.          Wend 
  586.       End If 
  587.       If Mouse Zone=6 and Mouse Key=1
  588.          XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
  589.          Ink 0 : Box BX,BY To BX+10,BY+12
  590.          ICONCOLNUM=((XM-160)/10)
  591.          ICONROWNUM=(YM)/13
  592.          CURRCOLOR=ICONCOLNUM+(ICONROWNUM*16)
  593.          BX=(ICONCOLNUM*10)+159 : BY=(ICONROWNUM*12)
  594.          Ink 17 : Box BX,BY To BX+10,BY+12
  595.          Goto NEWCOLOR
  596.       End If 
  597.       If Ntsc
  598.          Limit Mouse 112,215 To 431,239 : Rem : Screen 1 only... 
  599.       Else 
  600.          Limit Mouse 112,265 To 431,289
  601.       End If 
  602.    Until Mouse Key=1 and Mouse Zone>3 and Mouse Zone<6
  603.    Change Mouse MMODE
  604.    If Mouse Zone=4 and Mouse Key=1
  605.       If LCOUNT>50
  606.          Print #1,""
  607.       End If 
  608.       Print #1,"Palette ";Hex$(Colour(0));
  609.       For J=1 To NUMCOLORS-1
  610.          Print #1,",";Hex$(Colour(J));
  611.       Next J : Print #1,"" : LCOUNT=0
  612.       For J=0 To 31
  613.          OLDPAL$(J)=Hex$(Colour(J))
  614.       Next J
  615.    End If 
  616.    If Mouse Zone=5 and Mouse Key=1
  617.       For J=0 To 31
  618.          Screen 0 : Colour J,Val(OLDPAL$(J))
  619.          Screen 1 : Colour J,Val(OLDPAL$(J))
  620.       Next J
  621.    End If 
  622.    Wind Close 
  623.    If HIDFLAG=1
  624.       Screen Hide 1
  625.    End If 
  626.    If ARTMODE>0
  627.       Limit Mouse XOFFSET,YOFFSET To XLIMIT,YLIMIT
  628.    End If 
  629.    CURRCOLOR=OLDCURRCOLOR
  630.    Gosub CLEARCOLORGRID
  631.    If CURRCOLOR<16
  632.       ICONROWNUM=0 : ICONCOLNUM=CURRCOLOR
  633.    Else 
  634.       ICONROWNUM=1 : ICONCOLNUM=CURRCOLOR-16
  635.    End If 
  636.    BX=(ICONCOLNUM*10)+159 : BY=(ICONROWNUM*12)
  637.    Ink 17 : Box BX,BY To BX+10,BY+12
  638.    Return 
  639.  
  640. CIRCQUIT:
  641.    If XM<140
  642.       Change Mouse 4 : MMODE=4
  643.       ARTMODE=8 : Gosub CLEARGRID : Box 119,12 To 139,24 : Ink CURRCOLOR
  644.       Return 
  645.    End If 
  646. QUIT:
  647.    If GRMODE=0 Then Print #1,"Gr Writing 1 : "
  648.    Print #1,""
  649.    Limit Mouse : Close 1 : Close 2 : Kill "ram:XYclip.asc"
  650.    Change Mouse 1 : Edit 
  651.  
  652. COMMA:
  653.    Change Mouse 5
  654.    While Mouse Click=0 : Wend : Screen 0
  655.    XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
  656.    CURRCOLOR=Point(XM,YM) : Screen 1 : Gosub CLEARCOLORGRID
  657.    If CURRCOLOR<16
  658.       ICONROWNUM=0 : ICONCOLNUM=CURRCOLOR
  659.    Else 
  660.       ICONROWNUM=1 : ICONCOLNUM=CURRCOLOR-16
  661.    End If 
  662.    BX=(ICONCOLNUM*10)+159 : BY=(ICONROWNUM*12)
  663.    Box BX,BY To BX+10,BY+12 : Screen 0 : Ink CURRCOLOR
  664.    CFLAG=1 : Change Mouse MMODE : Return 
  665. CLEARGRID:
  666.    Ink 2 : Box 0,0 To 39,24 : Box 79,0 To 119,24 : Box 139,0 To 158,24
  667.    For Y=0 To 24 Step 12 : Draw 0,Y To 158,Y : Next Y : Draw 99,0 To 99,24
  668.    Ink 17 : Return 
  669. CLEARCOLORGRID:
  670.    Ink 0 : Box 159,0 To 319,24 : Draw 159,12 To 319,12
  671.    For Y=169 To 309 Step 10 : Draw Y,0 To Y,24 : Next Y
  672.    Ink 17 : Return 
  673. LLENNY:
  674.    LLENX=3 : LLENY=3
  675.    If X<100
  676.       LLENX=2
  677.       If X<10
  678.          LLENX=1
  679.       End If 
  680.    End If 
  681.    If Y<100
  682.       LLENY=2
  683.       If Y<10
  684.          LLENY=1
  685.       End If 
  686.    End If 
  687.    LLEN=LLENX+LLENY : Add LCOUNT,LLEN
  688.    Return 
  689.  
  690. E1: X01=X : Y01=Y : Return 
  691. E2: X02=X : Y02=Y : Return 
  692. E3: X03=X : Y03=Y : Return 
  693. E4: X04=X : Y04=Y : Return 
  694. E5: X05=X : Y05=Y : Return 
  695. E6: X06=X : Y06=Y : Return 
  696. E7: X07=X : Y07=Y : Return 
  697. E8: X08=X : Y08=Y : Return 
  698. E9: X09=X : Y09=Y : Return 
  699. E10: X10=X : Y10=Y : Return 
  700. E11: X11=X : Y11=Y : Return 
  701. E12: X12=X : Y12=Y : Return 
  702. E13: X13=X : Y13=Y : Return 
  703. E14: X14=X : Y14=Y : Return 
  704. E15: X15=X : Y15=Y : Return 
  705.  
  706. P1: Polygon X01,Y01 To X01,Y01 : Return 
  707. P2: Polygon X01,Y01 To X02,Y02 : Return 
  708. P3: Polygon X01,Y01 To X02,Y02 To X03,Y03 : Return 
  709. P4: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 : Return 
  710. P5: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 : Return 
  711. P6: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 : Return 
  712. P7: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 : Return 
  713. P8: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 : Return 
  714. P9: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 : Return 
  715. P10: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 To X10,Y10 : Return 
  716. P11: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 To X10,Y10 To X11,Y11 : Return 
  717. P12: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 To X10,Y10 To X11,Y11 To X12,Y12 : Return 
  718. P13: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 To X10,Y10 To X11,Y11 To X12,Y12 To X13,Y13 : Return 
  719. P14: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 To X10,Y10 To X11,Y11 To X12,Y12 To X13,Y13 To X14,Y14 : Return 
  720. P15: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 To X10,Y10 To X11,Y11 To X12,Y12 To X13,Y13 To X14,Y14 To X15,Y15 : Return 
  721. Return 
  722. ARTMODE1:
  723.    Gosub PLUSINK : Close 2 : Open In 2,"ram:XYclip.asc"
  724.    Screen 0 : Put Block 1 : Screen 1
  725.    Gosub CHECKWIDTH
  726.    If GRMODE<>1
  727.       Print #1,"Gr Writing 1 : "; : GRMODE=1 : Add LCOUNT,15 : Gosub CHECKWIDTH
  728.    End If 
  729.    If LCOUNT>50 Then Print #1,"" : LCOUNT=0
  730.    Print #1,"Polygon "; : Add LCOUNT,8
  731.    Input #2,X$ : Input #2,Y$ : X=Val(X$) : Y=Val(Y$)
  732.    Print #1,X;",";Y; : Gosub LLENNY : NUMELEMENTS=1 : Gosub E1
  733.    While Not Eof(2)
  734.       Input #2,X$ : Input #2,Y$ : X=Val(X$) : Y=Val(Y$)
  735.       X$=X$-" " : Y$=Y$-" "
  736.       Print #1," To ";X$;",";Y$; : Add LCOUNT,5 : Gosub LLENNY
  737.       Inc NUMELEMENTS
  738.       On NUMELEMENTS Gosub E1,E2,E3,E4,E5,E6,E7,E8,E9,E10,E11,E12,E13,E14,E15
  739.    Wend 
  740.    Screen 0 : On NUMELEMENTS Gosub P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15
  741.    Screen 1 : NEWFLAG=1 : Print #1," : "; : Add LCOUNT,3
  742.    Close 2 : Open Out 2,"ram:XYclip.asc"
  743.    Return 
  744. PLUSINK:
  745.    If CFLAG=0 or CURRCOLOR=HOLDCOLOR Then Return 
  746.    Gosub CHECKWIDTH : Print #1,"Ink ";CURRCOLOR;" : "; : Add LCOUNT,10
  747.    Gosub CHECKWIDTH : CFLAG=0 : HOLDCOLOR=CURRCOLOR : Return 
  748. CHECKWIDTH:
  749.    If LCOUNT>CODEWIDTH Then Print #1,"" : LCOUNT=0
  750.    Return 
  751. End Proc
  752.  
  753. Procedure SCRNCHECK
  754.    Shared GOTTASETUP,SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,SCRNTYPE$
  755.    Shared XOFFSET,YOFFSET,XLIMIT,YLIMIT
  756.    Dir$="Ram:" : FILE$="Ram:ArtCoderSettings"
  757.    If Exist(FILE$)
  758.       If Key Shift>0
  759.          GOTTASETUP=-1 : Pop Proc
  760.       Else 
  761.          Open In 1,FILE$
  762.          Input #1,SCRNWIDTH$,SCRNHEIGHT$,NUMCOLORS$,SCRNTYPE$,XOFFSET$,YOFFSET$,XLIMIT$,YLIMIT$
  763.          Close 1
  764.          SCRNWIDTH=Val(SCRNWIDTH$) : SCRNHEIGHT=Val(SCRNHEIGHT$)
  765.          NUMCOLORS=Val(NUMCOLORS$) : XOFFSET=Val(XOFFSET$) : YOFFSET=Val(YOFFSET$)
  766.          XLIMIT=Val(XLIMIT$) : YLIMIT=Val(YLIMIT$)
  767.          If SCRNTYPE$="Lowres"
  768.             Screen Open 0,SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,Lowres
  769.          End If 
  770.          If SCRNTYPE$="Hires"
  771.             Screen Open 0,SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,Hires
  772.          End If 
  773.          If SCRNTYPE$="Lowres+Laced"
  774.             Screen Open 0,SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,Lowres+Laced
  775.          End If 
  776.          If SCRNTYPE$="Hires+Laced"
  777.             Screen Open 0,SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,Hires+Laced
  778.          End If 
  779.          Curs Off : Flash Off 
  780.          Screen Display 0,XOFFSET,YOFFSET,SCRNWIDTH,SCRNHEIGHT
  781.          Ink ,0
  782.          If NUMCOLORS=2
  783.             Cls 1
  784.          End If 
  785.       End If 
  786.    Else 
  787.       GOTTASETUP=-1
  788.    End If 
  789.    End Proc
  790.  
  791. Procedure SCRNSETUP
  792.    Shared SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,SCRNTYPE$
  793.    Shared XOFFSET,YOFFSET,XLIMIT,YLIMIT
  794.    Screen Open 0,320,200,16,Lowres
  795.    Wait Vbl 
  796.    Limit Mouse : Ink 2
  797.    If Ntsc
  798.       Text 172,9,"320x200   352x240" : Text 172,21,"640x200   704x240"
  799.       Text 172,33,"320x400   352x480" : Text 172,45,"640x400   704x480"
  800.    Else 
  801.       Text 172,9,"320x256   352x290" : Text 172,21,"640x256   704x290"
  802.       Text 172,33,"320x512   352x566" : Text 172,45,"640x512   704x566"
  803.    End If 
  804.    Text 54,9,"Screen Size?" : Text 172,75,"2   4   8  16  32"
  805.    Draw 191,66 To 191,78 : Draw 223,66 To 223,78 : Draw 253,66 To 253,78
  806.    Draw 284,66 To 284,78 : Text 15,75,"Number of Colors?"
  807.    Box 159,36 To 319,48 : Draw 241,0 To 241,48 : Box 159,0 To 319,12
  808.    Box 159,12 To 319,24 : Box 159,24 To 319,36 : Box 159,66 To 319,78
  809.  
  810.    Repeat 
  811.       If Mouse Click=1 Then Gosub CLICKHANDLER
  812.    Until SCRNWIDTH>0 and NUMCOLORS>0
  813.  
  814.    If NUMCOLORS=2
  815.       Cls 1
  816.    End If 
  817.    Pop Proc
  818.  
  819. CLICKHANDLER:
  820.    XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
  821.    If XM<159 Then Return 
  822.    If YM>78 Then Return 
  823.    If YM>48 and YM<66 Then Return 
  824.    If YM<49
  825.       If XM<242
  826.          If YM<12
  827.             If Ntsc
  828.                SCRNWIDTH=320 : SCRNHEIGHT=200
  829.             Else 
  830.                SCRNWIDTH=320 : SCRNHEIGHT=256
  831.             End If 
  832.             SCRNTYPE$="Lowres"
  833.             Gosub CLEARGRID : Box 159,0 To 241,12 : Return 
  834.          End If 
  835.          If YM<24
  836.             If Ntsc
  837.                SCRNWIDTH=640 : SCRNHEIGHT=200
  838.             Else 
  839.                SCRNWIDTH=640 : SCRNHEIGHT=256
  840.             End If 
  841.             SCRNTYPE$="Hires"
  842.             Gosub CLEARGRID : Box 159,12 To 241,24 : 
  843.             If NUMCOLORS=32
  844.                NUMCOLORS=16 : Gosub CLEARCOLORGRID : Box 253,66 To 284,78
  845.             End If 
  846.             Return 
  847.          End If 
  848.          If YM<34
  849.             If Ntsc
  850.                SCRNWIDTH=320 : SCRNHEIGHT=400
  851.             Else 
  852.                SCRNWIDTH=320 : SCRNHEIGHT=512
  853.             End If 
  854.             SCRNTYPE$="Lowres+Laced"
  855.             Gosub CLEARGRID : Box 159,24 To 241,36 : Return 
  856.          End If 
  857.             If Ntsc
  858.                SCRNWIDTH=640 : SCRNHEIGHT=400
  859.             Else 
  860.                SCRNWIDTH=640 : SCRNHEIGHT=512
  861.             End If 
  862.             SCRNTYPE$="Hires+Laced"
  863.             Gosub CLEARGRID : Box 159,36 To 241,48
  864.             If NUMCOLORS=32
  865.                NUMCOLORS=16 : Gosub CLEARCOLORGRID : Box 253,66 To 284,78
  866.             End If 
  867.             Return 
  868.       Else 
  869.          If YM<12
  870.             If Ntsc
  871.                SCRNWIDTH=352 : SCRNHEIGHT=240
  872.             Else 
  873.                SCRNWIDTH=352 : SCRNHEIGHT=290
  874.             End If 
  875.             SCRNTYPE$="Lowres"
  876.             Gosub CLEARGRID : Box 241,0 To 319,12 : Return 
  877.          End If 
  878.          If YM<24
  879.             If Ntsc
  880.                SCRNWIDTH=704 : SCRNHEIGHT=240
  881.             Else 
  882.                SCRNWIDTH=704 : SCRNHEIGHT=290
  883.             End If 
  884.             SCRNTYPE$="Hires"
  885.             Gosub CLEARGRID : Box 241,12 To 319,24
  886.             If NUMCOLORS=32
  887.                NUMCOLORS=16 : Gosub CLEARCOLORGRID : Box 253,66 To 284,78
  888.             End If 
  889.             Return 
  890.          End If 
  891.          If YM<34
  892.             If Ntsc
  893.                SCRNWIDTH=352 : SCRNHEIGHT=480
  894.             Else 
  895.                SCRNWIDTH=352 : SCRNHEIGHT=566
  896.             End If 
  897.             SCRNTYPE$="Lowres+Laced"
  898.             Gosub CLEARGRID : Box 241,24 To 319,36 : Return 
  899.          End If 
  900.             If Ntsc
  901.                SCRNWIDTH=704 : SCRNHEIGHT=480
  902.             Else 
  903.                SCRNWIDTH=704 : SCRNHEIGHT=566
  904.             End If 
  905.             SCRNTYPE$="Hires+Laced"
  906.             Gosub CLEARGRID : Box 241,36 To 319,48
  907.             If NUMCOLORS=32
  908.                NUMCOLORS=16 : Gosub CLEARCOLORGRID : Box 253,66 To 284,78
  909.             End If 
  910.             Return 
  911.       End If 
  912.    End If 
  913.    If YM>65
  914.       If XM<191
  915.          NUMCOLORS=2 : Gosub CLEARCOLORGRID : Box 159,66 To 191,78 : Return 
  916.       End If 
  917.       If XM<223
  918.          NUMCOLORS=4 : Gosub CLEARCOLORGRID : Box 191,66 To 223,78 : Return 
  919.       End If 
  920.       If XM<253
  921.          NUMCOLORS=8 : Gosub CLEARCOLORGRID : Box 223,66 To 253,78 : Return 
  922.       End If 
  923.       If XM<284
  924.          NUMCOLORS=16 : Gosub CLEARCOLORGRID : Box 253,66 To 284,78 : Return 
  925.       End If 
  926.          If SCRNWIDTH>400
  927.             NUMCOLORS=16 : Gosub CLEARCOLORGRID : Box 253,66 To 284,78 : Return 
  928.          Else 
  929.             NUMCOLORS=32 : Gosub CLEARCOLORGRID : Box 284,66 To 319,78 : Return 
  930.          End If 
  931.    End If 
  932.    Return 
  933. CLEARGRID:
  934.    Ink 2 : Box 159,0 To 319,12 : Box 159,12 To 319,24 : Box 159,24 To 319,36
  935.    Box 159,36 To 319,48 : Draw 241,0 To 241,48 : Ink 4
  936.    Return 
  937. CLEARCOLORGRID:
  938.    Ink 2 : Box 159,66 To 319,78 : Draw 191,66 To 191,78 : Draw 223,66 To 223,78
  939.    Draw 253,66 To 253,78 : Draw 284,66 To 284,78 : Ink 4
  940.    Return 
  941. End Proc
  942.  
  943. Procedure SCRNCENTER
  944.    Shared SCRNWIDTH,SCRNHEIGHT,SCRNTYPE$,NUMCOLORS,XOFFSET,YOFFSET,XLIMIT,YLIMIT
  945.    If SCRNTYPE$="Lowres"
  946.       Screen Open 0,SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,Lowres
  947.    End If 
  948.    If SCRNTYPE$="Hires"
  949.       Screen Open 0,SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,Hires
  950.    End If 
  951.    If SCRNTYPE$="Lowres+Laced"
  952.       Screen Open 0,SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,Lowres+Laced
  953.    End If 
  954.    If SCRNTYPE$="Hires+Laced"
  955.       Screen Open 0,SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,Hires+Laced
  956.    End If 
  957.  
  958.    Cls 1 : Curs Off : Flash Off : Box 0,0 To SCRNWIDTH-1,SCRNHEIGHT-1
  959.    Box 0,2 To SCRNWIDTH-1,SCRNHEIGHT-3 : Box 0,4 To SCRNWIDTH-1,SCRNHEIGHT-5
  960.    Locate ,10 : Centre "Center screen then click mouse."
  961.    X Mouse=190 : Y Mouse=30 : Wait 10
  962.    While Mouse Click<>1 : 
  963.       XOFFSET=X Mouse-88 : YOFFSET=Y Mouse-38
  964.       Gosub CUTXOFFSET
  965.       Screen Display 0,XOFFSET,YOFFSET,SCRNWIDTH,SCRNHEIGHT
  966.    Wend 
  967.    XLIMIT=X Hard(SCRNWIDTH-1) : YLIMIT=Y Hard(SCRNHEIGHT-1)
  968.    Open Out 1,"Ram:ArtCoderSettings"
  969.       Print #1,SCRNWIDTH : Print #1,SCRNHEIGHT : Print #1,NUMCOLORS
  970.       Print #1,SCRNTYPE$ : Print #1,XOFFSET : Print #1,YOFFSET
  971.       Print #1,XLIMIT : Print #1,YLIMIT
  972.    Close 1 : Cls 1 : Pop Proc
  973.  
  974. CUTXOFFSET:
  975.    If XOFFSET<96 Then XOFFSET=80 : Return 
  976.    If XOFFSET<112 Then XOFFSET=96 : Return 
  977.    If XOFFSET<128 Then XOFFSET=112 : Return 
  978.    If XOFFSET<144 Then XOFFSET=128
  979.    Return 
  980. End Proc
  981.  
  982. Procedure CHECKPATTERN
  983.    Shared PATNUM,CURRCOLOR,PCOLOR,OUTFLAG
  984.    Screen 0 : Get Block 1,0,0,32,18
  985.    Draw 0,0 To 1,1 : CURRCOLOR=Point(1,1) : Bar 0,0 To 17,17
  986.    OLCOLOR=Point(0,0)
  987.    PIX$=""
  988.    Restore CHECKPOINTS
  989.    For J=1 To 12
  990.       Read X,Y : PIXCHECK=Point(X,Y)
  991.       If PIXCHECK<>CURRCOLOR Then PCOLOR=PIXCHECK
  992.    Next J
  993.    Ink 0,1,2 : Bar 0,0 To 17,17 : 
  994.    TESTOLCOLOR=Point(0,0) : If TESTOLCOLOR=2 Then OUTFLAG=1
  995.    Restore CHECKPOINTS
  996.    For J=1 To 12
  997.       Read X,Y : PIXCHECK=Point(X,Y) : PIX$=PIX$+Str$(PIXCHECK)-" "
  998.    Next J
  999.    Restore PATTERNS
  1000.    Gosub CHECKPAT
  1001.    Ink CURRCOLOR,PCOLOR,OLCOLOR : Screen 1 : Ink 17
  1002.    If OUTFLAG=1 Then Polyline 30,17 To 32,22 To 36,14
  1003.    If PATNUM>0 Then Polyline 70,17 To 72,22 To 76,14
  1004.    Screen 0 : Put Block 1
  1005.    Pop Proc
  1006.  
  1007. CHECKPAT: Rem: finds value of PATNUM...  
  1008.    PATNUM=-1
  1009.    While PATTERN$<>PIX$
  1010.       Inc PATNUM : Read PATTERN$
  1011.    Wend 
  1012.    Return 
  1013.  
  1014. PATTERNS:
  1015. Data "000000000000","111111111111","101010101110","110111111101","101111101111"
  1016. Data "110111110001","100111100001","011111111111","010000000000","011011111101"
  1017. Data "111111101110","100111000001","100001111100","000111111101","101111000010"
  1018. Data "000000111100","000000011100","010111111101","111101100011","111111001111"
  1019. Data "111111110011","111111000011","010111111111","000011111111","010111111110"
  1020. Data "111111101111","111111110111","111111000011","101110111111","101010111111"
  1021. Data "101010111110","101010101110","101000101110","100000001100","100000000000"
  1022.  
  1023. CHECKPOINTS:
  1024. Data 5,2,3,3,4,3,5,3,6,3,7,3,8,3,16,2,1,8,1,16,4,11,4,12
  1025. End Proc
  1026.  
  1027. Procedure RGBER
  1028.    Shared CURRCOLOR,CURRRED,CURRGREEN,CURRBLUE,CHEXR$,CHEXG$,CHEXB$,GRMODE
  1029.    CHEX$=Hex$(Colour(CURRCOLOR),3)
  1030.    CHEXR$=Mid$(CHEX$,2,1) : CHEXG$=Mid$(CHEX$,3,1) : CHEXB$=Right$(CHEX$,1)
  1031.    CURRCHEX$=CHEXR$ : Gosub CHECKER : CURRRED=CHEX
  1032.    CURRCHEX$=CHEXG$ : Gosub CHECKER : CURRGREEN=CHEX
  1033.    CURRCHEX$=CHEXB$ : Gosub CHECKER : CURRBLUE=CHEX
  1034.    Pop Proc
  1035. CHECKER:
  1036.    If CURRCHEX$="A" Then CHEX=10 : Return 
  1037.    If CURRCHEX$="B" Then CHEX=11 : Return 
  1038.    If CURRCHEX$="C" Then CHEX=12 : Return 
  1039.    If CURRCHEX$="D" Then CHEX=13 : Return 
  1040.    If CURRCHEX$="E" Then CHEX=14 : Return 
  1041.    If CURRCHEX$="F" Then CHEX=15 : Return 
  1042.    CHEX=Val(CURRCHEX$) : Return 
  1043. End Proc